package com.zjmzxfzhl.modules.app.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zjmzxfzhl.common.core.base.BaseService;
import com.zjmzxfzhl.modules.app.entity.AppProj;
import com.zjmzxfzhl.modules.app.entity.AppTask;
import com.zjmzxfzhl.modules.app.form.*;
import com.zjmzxfzhl.modules.sys.entity.vo.ElTree;

import java.util.List;
import java.util.Map;

/**
 * Service
 * 
 * @author 张森荣
 */
public interface AppTaskService extends BaseService<AppTask> {
    /**
     * 分页查询
     * 
     * @param page
     * @param appTask
     * @return
     */
    IPage<AppTask> list(IPage<AppTask> page, AppTaskVo appTask);

    /**
     * 新增任务，自动计算机构级别、机构级次码、是否叶子
     *
     * @param appTask
     * @return
     */
    boolean saveAppTask(AppTask appTask);

    /**
     * 机构管理，机构树数据
     *
     * @return
     */
    List<ElTree> getTreeData(AppTaskVo appTask,Integer current,Integer size,String parentId,Integer level);

    /**
     * 移动任务，自动计算机构级别、机构级次码、是否叶子
     *
     * @param appTask
     * @return
     */
    boolean moveTree(AppTask appTask,String parentId);

    /**
     * 统计任务数量
     *
     * @return
     */
    List<TaskTotalVo> taskTotal(AppTask appTask);

    /**
     * 批量删除
     *
     * @return
     */
    boolean delByIds(String ids);


    /**
     * 变更任务状态（待办的）
     *
     * @return
     */
    boolean wait(String taskId);
    /**
     * 变更任务状态（已确认）
     *
     * @return
     */
    boolean confirmed(String taskId);
    /**
     * 变更任务状态（设计中）
     *
     * @return
     */
    boolean inDesign(String taskId);
    /**
     * 变更任务状态（开发中）
     *
     * @return
     */
    boolean inDevelop(String taskId);
    /**
     * 变更任务状态（修复中）
     *
     * @return
     */
    boolean inRepair(String taskId);
    /**
     * 变更任务状态（进行中）
     *
     * @return
     */
    boolean inProgress(String taskId);
    /**
     * 变更任务状态（已完成）
     *
     * @return
     */
    boolean finish(String taskId);

    /**
     * 变更任务状态（已验收）
     *
     * @return
     */
    boolean verified(String taskId);
    /**
     * 变更任务状态（已取消）
     *
     * @return
     */
    boolean cancel(String taskId);
    /**
     * 变更任务状态（已拒绝）
     *
     * @return
     */
    boolean refused(String taskId);
    /**
     * 变更任务状态（已中止）
     *
     * @return
     */
    boolean suspend(String taskId);
    /**
     * 根据id查询
     *
     * @return
     */
    AppTask queryById(String id);

    /**
     * 修改任务，自动计算机构级别、机构级次码、是否叶子
     *
     * @param appTask
     * @return
     */
    boolean updateAppTask(AppTask appTask);

    /**
     * 统计项目概括
     *
     * @param masterUserId
     * @param projId
     * @return
     */
    TaskSumVo getTaskSun(String masterUserId,String projId);

    /**
     * 计算数量
     *
     * @param appTaskVo
     * @return
     */
    Integer selectRowCount(AppTaskVo appTaskVo);

    /**
     * 计算里程碑逾期任务
     *
     * @param mptId
     * @return
     */
    Integer timeoutCount(String mptId);

    /**
     * 计算里程碑未完成任务
     *
     * @param mptId
     * @return
     */
    Integer notFinishCount(String mptId);

    /**
     * 项目任务甘特图数据
     *
     * @return
     */
    List<TaskGanttVo> ganttChart(AppTaskVo appTaskVo);

    /**
     * 分页查询
     *
     * @param
     * @return
     */
    List<MeetTaskVo>  getMeetTask(String projId);

    /**
     * 分页查询
     *
     * @param
     * @return
     */
    List<AppTask> getTaskList(String[] idsArr);

    /**
     * 变更任务（时间）
     *
     * @return
     */
    AppTask modiTask(AppTask appTask);

    /**
     * 查询变更任务列表
     *
     * @param
     * @return
     */
    List<AppTask> modiTaskList(String taskId);

    /**
     * 面包屑导航
     *
     * @return
     */
    List<TaskCrumbVo> taskCrumb(String taskId);

    /**
     * 获取项目任务周期
     *
     * @return
     */
    List<TaskCycleVo> taskCycle(String projId);
}
